package top.yxf.spring.beans.factory.config;

import top.yxf.spring.beans.BeansException;

/**
 *  Factory hook that allows for custom modification of new bean instances, e.g.
 *  checking for marker interfaces or wrapping them with proxies.
 * @author xs.wu
 * 也是 Spring 提供的扩展机制，不过 BeanPostProcessor
 * 是在 Bean 对象实例化之后修改 Bean 对象，也可以替换 Bean 对象
 */
public interface BeanPostProcessor {


    /**
     * 在 Bean 对象执行初始化方法之前，执行此方法
     *
     * @param bean
     * @param beanName
     * @return
     * @throws BeansException
     */
    Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;

    /**
     * 在 Bean 对象执行初始化方法之后，执行此方法
     *
     * @param bean
     * @param beanName
     * @return
     * @throws BeansException
     */
    Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;

}
